<?php

class BancoDados{
	private static $servidor;
	private static $usuario;
	private static $senha;
	private static $banco;
	
	/**
	 * Retorna uma conexao com o Banco de Dados.
	 * @return int
	 */
	public static function conectaBD() {
		if(!($conexao		= mysql_connect(BancoDados::getServidor(), BancoDados::getUsuario(), BancoDados::getSenha())))
		{
			trigger_error("erro no banco de dados: ".mysql_error()."<br/>");
			adicionaMensagem(texto("BANCO_DADOS_ERRO_CONEXAO"), "erro");
		}
		else
		{
			if(!mysql_select_db(BancoDados::getBanco(), $conexao))
			{
				trigger_error("erro no banco de dados: ".mysql_error()."<br/>");
				adicionaMensagem(texto("BANCO_DADOS_ERRO_CONEXAO"), "erro");
			}
		}
		return $conexao;
	}
	
	/**
	 * Retorna o resultado de um acesso ao Banco de Dados.
	 * @return array
	 * @param string $query
	 * @param int[optional] $conexao
	 */
	public static function query($strQuery, $conexao = null, $imprime = null){
		if($imprime){
			debug($strQuery);
		}
		if($conexao == null){
			if($conexao	=	BancoDados::conectaBD()){
				if ($resultSet	=	mysql_query($strQuery, $conexao)) {
					$insertId = mysql_insert_id();
					BancoDados::desconectaBD($conexao);
					if (is_resource($resultSet)){
						$vetor = array();
						while($resultado	=	mysql_fetch_array($resultSet)){
							array_push($vetor, $resultado);
						}
						
						return $vetor;
					}
					elseif(strstr($strQuery, "INSERT")){
						if($insertId == 0){
							return true;
						}
						else{
							return $insertId;
						}
					} 
					else {
						return true;
					}
				}
				else{
					trigger_error("<b>erro no banco de dados:</b> ".mysql_error()."<br /><b>query:</b> $strQuery<br />");
					BancoDados::desconectaBD($conexao);
					//die();
					adicionaMensagem(texto("BANCO_DADOS_ERRO_QUERY"), "erro");
					return false;
				}
			}
			else{
				return false;
			}
			
		}
		else{
			if($resultSet = mysql_query($strQuery, $conexao))
				if (is_resource($resultSet)){
					$vetor 	=	array();
					while($resultado	=	mysql_fetch_array($resultSet)){
						array_push($vetor, $resultado);
					}
					
					return $vetor;
				}
				else {
					return true;
				}
			else {
				trigger_error("<b>erro no banco de dados:</b> ".mysql_error()."<br /><b>query:</b> $strQuery<br />");
				adicionaMensagem(texto("BANCO_DADOS_ERRO_QUERY"), "erro");
				BancoDados::desconectaBD($conexao);
				return false;
			}
		}
	}
	
	/**
	 * Retorna o resultado de um acesso ao Banco de Dados no formato resource.
	 * @return resourse
	 * @param string $query
	 * @param int[optional] $conexao
	 */
	public static function queryRes($strQuery){
		if($conexao	=	BancoDados::conectaBD()){
				if ($resultSet	=	mysql_query($strQuery, $conexao)) {
					BancoDados::desconectaBD($conexao);
					if (is_resource($resultSet)){
						
						return $resultSet;
					}
					else {
						return true;
					}
				}
				else{
					BancoDados::desconectaBD($conexao);
					adicionaMensagem(texto("BANCO_DADOS_ERRO_QUERY"), "erro");
					return false;
				}
			}
	}
	
	public static function queryArray($strQuery){
		if($conexao	=	BancoDados::conectaBD()){
				if ($resultSet	=	mysql_query($strQuery, $conexao)) {
					BancoDados::desconectaBD($conexao);
					if (is_resource($resultSet)){
						
						return mysql_fetch_array($resultSet);
					}
					else {
						return true;
					}
				}
				else{
					BancoDados::desconectaBD($conexao);
					adicionaMensagem(texto("BANCO_DADOS_ERRO_QUERY"), "erro");
					return false;
				}
			}
	}
  
	public static function getData(){
		if($conexao = BancoDados::conectaBD()){
			if ($resultSet  = mysql_query("SELECT DATE(NOW()) AS 'data';", $conexao)) {
				BancoDados::desconectaBD($conexao);
				if (is_resource($resultSet)){
					$arrTemp = mysql_fetch_assoc($resultSet);
					return $arrTemp['data'];
				}
				else {
					BancoDados::desconectaBD($conexao);
					adicionaMensagem(texto("BANCO_DADOS_ERRO_QUERY"), "erro");
					return false;
				}
			}
			else{
				BancoDados::desconectaBD($conexao);
				adicionaMensagem(texto("BANCO_DADOS_ERRO_QUERY"), "erro");
				return false;
			}
		}
	}
	
	public static function getDataHora(){
		if($conexao = BancoDados::conectaBD()){
			if ($resultSet  = mysql_query("SELECT NOW() AS 'agora';", $conexao)) {
				BancoDados::desconectaBD($conexao);
				if (is_resource($resultSet)){
					$arrTemp = mysql_fetch_assoc($resultSet);
					return $arrTemp['agora'];
				}
				else {
					BancoDados::desconectaBD($conexao);
					adicionaMensagem(texto("BANCO_DADOS_ERRO_QUERY"), "erro");
					return false;
				}
			}
			else{
				BancoDados::desconectaBD($conexao);
				adicionaMensagem(texto("BANCO_DADOS_ERRO_QUERY"), "erro");
				return false;
			}
		}
	}
	
	/**
	 * Retorna um booleano que indica sucesso na desconexao ao Banco de Dados.
	 * @return bool
	 * @param $conexao Object
	 */
	public static function desconectaBD($conexao){
		return mysql_close($conexao);
	}

	/**
     * Retorna o Banco selecionado da Base de Dados.
     * @return string
     * @see BancoDados::$banco
     */
    private static function getBanco()
    {
        return BancoDados::$banco;
    }
   
    /**
     * Seta o Banco da Base de Dados a ser utilizado.
     * @param string $banco
     * @see BancoDados::$banco
     */
    private static function setBanco($banco)
    {
        BancoDados::$banco = $banco;
    }
   
    /**
     * Retorna a senha da Base de Dados
     * @return string
     * @see BancoDados::$senha
     */
    private static function getSenha()
    {
        return BancoDados::$senha;

    }
   
    /**
     * Seta a senha da Base de Dados.
     * @param string $senha
     * @see BancoDados::$senha
     */
    private static function setSenha($senha)
    {
        BancoDados::$senha = $senha;
    }
   
    /**
     * Retorna o servidor onde se encontra a base de dados.
     * @return string
     * @see BancoDados::$servidor
     */
    private static function getServidor()
    {
        return BancoDados::$servidor;
    }
   
    /**
     * Seta o servidor onde se encontra a base de dados.
     * @param string $servidor
     * @see BancoDados::$servidor
     */
    private static function setServidor($servidor)
    {
        BancoDados::$servidor = $servidor;
    }
   
    /**
     * Retorna o usuario da base de dados.
     * @return string
     * @see BancoDados::$usuario
     */
    private static function getUsuario()
    {
        return BancoDados::$usuario;
    }
   
    /**
     * Seta o usuario da Base de Dados.
     * @param string $usuario
     * @see BancoDados::$usuario
     */
    private static function setUsuario($usuario)
    {
        BancoDados::$usuario = $usuario;
    }
	
   /**
    * Seta o $servidor, $usuario, $senha, $banco.
    * @param string $servidor
    * @param string $usuario
    * @param string $senha
    * @param string $banco
    */
    public static function setBancoDados($servidor, $usuario, $senha, $banco) {
        BancoDados::setServidor($servidor);
        BancoDados::setUsuario($usuario);
        BancoDados::setSenha($senha);
        BancoDados::setBanco($banco);
    }
}
?>